package com.itany.corejava.code08_常用类.其他类;

import com.itany.corejava.constant.DateUtilConstant;
import com.itany.corejava.util.DateUtil;

import java.util.Calendar;
import java.util.Date;

/**
 * @author 石小俊
 * @date 2023年04月28日 10:18
 */
public class Test01_日历类 {

    public static void main(String[] args) {
        // 由于Calendar是一个抽象类,无法通过构造方法进行实例化
        // 但是该类本身提供了对应的构造器
        // 因此,可以通过该类提供的构造器获取到对应的对象
        // 获取当前时间所表示的日历对象
        Calendar calendar = Calendar.getInstance();

        // getTime()
        Date date = calendar.getTime();
        System.out.println(DateUtil.toString(date));

        // setTime(date)
        calendar.setTime(DateUtil.getYesterday(new Date()));
        System.out.println(DateUtil.toString(calendar.getTime()));

        // 当前时间的12小时后
        Date date2 = new Date(new Date().getTime() + DateUtilConstant.ONE_DAY_MILLISECOND / 2);
        calendar.setTime(date2);

        // get():根据传递的常量值的不同,返回日期中对应部分的值,字段常量可以参考API文档
        System.out.println(calendar.get(Calendar.YEAR) + "年");
        // 对于月份,取值为0-11
        System.out.println((calendar.get(Calendar.MONTH) + 1) + "月");
        System.out.println(calendar.get(Calendar.DATE)+"日");
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH)+"日");
        // 十二小时制
        System.out.println(calendar.get(Calendar.HOUR)+"时");
        // 二十四小时制
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY)+"时");
        System.out.println(calendar.get(Calendar.MINUTE)+"分");
        System.out.println(calendar.get(Calendar.SECOND)+"秒");
        System.out.println(calendar.get(Calendar.MILLISECOND)+"毫秒");

        // set()
        // 设置为昨天
        calendar.set(Calendar.DATE,27);
        calendar.set(Calendar.HOUR_OF_DAY,10);
        // 日期会自动进行运算,当设置的值超出了范围之后
        // 会在日期值中自动进行运算
        // 月份值0-11,13表示下一年的第二个月
        calendar.set(Calendar.MONTH,13);
        System.out.println(DateUtil.toString(calendar.getTime()));

        // 根据指定年月求天数
        System.out.println(DateUtil.getDay(2020,2));

        // add()
        System.out.println(DateUtil.toString(calendar.getTime()));
        // 年份-1
        calendar.add(Calendar.YEAR,-1);
        // 月份+1
        calendar.add(Calendar.MONTH,1);
        // 天数+10
        calendar.add(Calendar.DATE,10);
        // 20小时后
        calendar.add(Calendar.HOUR_OF_DAY,20);
        System.out.println(DateUtil.toString(calendar.getTime()));

        // 获取毫秒数
        System.out.println("毫秒数:"+calendar.getTimeInMillis());

        // 清空日历的毫秒值,即回到纪元时间
        calendar.clear();
        System.out.println(DateUtil.toString(calendar.getTime()));

        calendar = Calendar.getInstance();
        System.out.println("年份可能的最大值:"+calendar.getActualMaximum(Calendar.YEAR));
        System.out.println("月份可能的最大值:"+calendar.getActualMaximum(Calendar.MONTH));
        System.out.println("天数可能的最大值:"+calendar.getActualMaximum(Calendar.DATE));


        System.out.println(DateUtil.getDay2(2023,2));
    }

}
